home *** CD-ROM | disk | FTP | other *** search
- // Sidebar has its own NS, so no need to object-encapsulate
-
- // Simplified version of jQuery's $.each function
- var each = function(list, fun){
- for (var i=0; i < list.length; i++)
- if (fun.apply(list[i]) == false) return list
- return list
- }
-
- var collapseNode = function(el) {addClass(el, "hidden")}
- var expandNode = function(el){removeClass(el, "hidden")}
- var addClass = function(el, class){
- var classes = el.className.split(" ")
- if (!(class in classes)) {
- classes.push(class)
- el.className = classes.join(" ")
- }
- }
- var removeClass = function(el, class){
- el.className = el.className.split(" ").filter(function(el){return el != class}).join(" ")
- }
-
-
- var init = function (){
- if (!pref("show_prefbutton")) {
- var b = document.getElementsByTagName("button")[0]
- b.parentNode.removeChild(b)
- }
-
- populate()
- }
-
- var bookmarks = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Components.interfaces.nsINavBookmarksService);
- var hist = Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsINavHistoryService);
- var favicons = Components.classes["@mozilla.org/browser/favicon-service;1"].getService(Components.interfaces.nsIFaviconService);
- var io = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService)
- var win = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
- .getInterface(Components.interfaces.nsIWebNavigation)
- .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
- .rootTreeItem
- .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
- .getInterface(Components.interfaces.nsIDOMWindow);
- var pref = favmarks.pref
- var log = favmarks.log
-
- var populate = function(){
- var tops = []
- if (pref("show_places")) tops.push(bookmarks.placesRoot)
- if (pref("show_bms_menu")) tops.push(bookmarks.bookmarksMenuFolder)
- if (pref("show_tags")) tops.push(bookmarks.tagsFolder)
- if (pref("show_unfiled")) tops.push(bookmarks.unfiledBookmarksFolder)
- if (pref("show_bms_toolbar")) tops.push(bookmarks.toolbarFolder)
-
- var tops_labels = []
- tops_labels[bookmarks.placesRoot] = "Places"
- tops_labels[bookmarks.bookmarksMenuFolder] = bookmarks.getItemTitle(bookmarks.bookmarksMenuFolder)
- tops_labels[bookmarks.tagsFolder] = bookmarks.getItemTitle(bookmarks.tagsFolder)
- tops_labels[bookmarks.unfiledBookmarksFolder] = bookmarks.getItemTitle(bookmarks.unfiledBookmarksFolder)
- tops_labels[bookmarks.toolbarFolder] = bookmarks.getItemTitle(bookmarks.toolbarFolder)
-
- each(tops, function(){
- var root = document.createElement("vbox")
- var label = document.createElement("label")
- label.setAttribute("value", tops_labels[this])
- root.appendChild(label)
-
- var tree = getTree(this)
- root.appendChild(tree)
- document.getElementById("favmarks-container").appendChild(root)
- tree.className = ""
- if (pref("expanded_folders") != "")
- each(pref("expanded_folders").split("|"), function(){
- document.getElementById("folder-"+this).expand()
- })
- })
- }
-
- var __exapse = function(id, action){
- var expanded = []
- var nums = pref("expanded_folders").split("|")
- for (var i=0; i<nums.length; i++)
- if (parseInt(nums[i]))
- expanded.push(parseInt(nums[i]))
-
- switch(action){
- case "expand":
- if (expanded.indexOf(id) == -1)
- expanded.push(id)
- break
- case "collapse":
- if (expanded.indexOf(id) != -1)
- expanded = expanded.filter(function(el){return el != id})
- break
- case "toggle":
- default:
- if (expanded.indexOf(id) == -1)
- expanded.push(id)
- else
- expanded = expanded.filter(function(el){return el != id})
- break
- }
-
- pref("expanded_folders", expanded.sort().join("|"))
- }
- var toggleExpanded = function(id){__exapse(id, "toggle")}
- var expand = function(id){__exapse(id, "expand")}
- var collapse = function(id){__exapse(id, "collapse")}
-
- var getTree = function(id){
- var marks = getFolder(id)
-
- var tree = document.createElement("vbox")
- tree.id = "folder-"+id
- tree.className = "hidden folder"
-
- var root = document.createElement("box")
- tree.appendChild(root)
-
- for (var i=0; i<marks.length; i++) {
- var item = marks[i]
- switch(item.type) {
- case item.RESULT_TYPE_URI:
- var rep = document.createElement("image")
- rep.setAttribute(
- "src",
- favicons.getFaviconImageForPage(
- io.newURI(item.uri, null, null)
- ).spec
- )
- rep.setAttribute("tooltiptext", item.title)
- rep.appendChild(document.createTextNode(item.uri))
- rep.addEventListener("click", function(e){
- switch(e.which){
- // left
- case 1:
- win.gBrowser.loadURI(this.firstChild.textContent)
- break
- // middle
- case 2:
- win.gBrowser.selectedTab = win.gBrowser.addTab(this.firstChild.textContent)
- break
- // right
- case 3:
- break
- }
- }, false)
- root.appendChild(rep)
- break
- case item.RESULT_TYPE_FOLDER:
- case item.RESULT_TYPE_DYNAMIC_CONTAINER:
- var text = document.createElement("label")
- text.appendChild(document.createTextNode(item.title))
- text.addEventListener("click", function(e){
- switch(e.which) {
- // left
- case 1:
- case 2:
- var id = parseInt(this.parentNode.id.replace("folder-", ""))
- if (this.parentNode.className.match("hidden")) {
- expand(id)
- expandNode(this.parentNode)
- }
- else {
- collapse(id)
- collapseNode(this.parentNode)
- }
- break
- // middle
- //case 2:
- // break
- // right
- case 3:
- break
- }
- }, false)
-
- var box = getTree(item.itemId)
-
- box.insertBefore(text, box.firstChild)
- tree.appendChild(box)
- break
- }
- }
- return tree
- }
-
- var getFolder = function(id){
- var q = hist.getNewQuery()
- q.setFolders([id], 1)
- var res = hist.executeQuery(q, hist.getNewQueryOptions()).root
- var ret = []
- res.containerOpen = true
- for (var i=0; i<res.childCount; i++)
- ret.push(res.getChild(i))
- return ret
- }
-
- // run every time the window (sidebar) is loaded
- document.addEventListener("DOMContentLoaded", init, false)
-